"""
数据库初始化脚本
"""

import os
import sys

# Add the project root directory to Python path
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, project_root)

from app import create_app, db
from app.models.user import User
from app.models.team import Team
from app.models.project import Project
from app.models.task import Task, TaskStatus, TaskPriority

def init_database():
    """初始化数据库"""
    app = create_app()
    
    with app.app_context():
        # 创建所有表
        db.create_all()
        print("[SUCCESS] 数据库表创建成功")
        
        # 创建管理员用户
        admin_user = User(
            username='admin',
            email='admin@taskflow.com',
            first_name='Admin',
            last_name='User',
            is_admin=True
        )
        admin_user.set_password('admin123')
        
        # 检查管理员是否已存在
        if not User.find_by_username('admin'):
            db.session.add(admin_user)
            db.session.commit()
            print("[SUCCESS] 管理员用户创建成功 (用户名: admin, 密码: admin123)")
        else:
            print("[INFO] 管理员用户已存在")
        
        # 创建示例数据
        create_sample_data()
        
        print("[SUCCESS] 数据库初始化完成！")

def create_sample_data():
    """创建示例数据"""
    try:
        # 创建测试用户
        test_user = User(
            username='testuser',
            email='test@taskflow.com',
            first_name='Test',
            last_name='User'
        )
        test_user.set_password('test123')
        
        if not User.find_by_username('testuser'):
            db.session.add(test_user)
            db.session.commit()
            print("[SUCCESS] 测试用户创建成功 (用户名: testuser, 密码: test123)")
        
        # 创建示例团队
        admin = User.find_by_username('admin')
        test_user = User.find_by_username('testuser')
        
        if admin and test_user:
            team = Team(
                name='开发团队',
                description='负责产品开发的团队',
                owner_id=admin.id
            )
            db.session.add(team)
            db.session.commit()
            
            # 添加团队成员
            team.add_member(test_user.id, 'member')
            print("[SUCCESS] 示例团队创建成功")
            
            # 创建示例项目
            project = Project(
                name='TaskFlow系统',
                description='智能任务管理系统开发项目',
                owner_id=admin.id,
                team_id=team.id
            )
            db.session.add(project)
            db.session.commit()
            print("[SUCCESS] 示例项目创建成功")
            
            # 创建示例任务
            sample_tasks = [
                {
                    'title': '设计数据库架构',
                    'description': '设计用户、任务、项目等核心数据表',
                    'priority': TaskPriority.HIGH,
                    'assignee_id': test_user.id
                },
                {
                    'title': '实现用户认证',
                    'description': '实现用户注册、登录、JWT认证功能',
                    'priority': TaskPriority.HIGH,
                    'assignee_id': test_user.id
                },
                {
                    'title': '开发任务管理API',
                    'description': '实现任务的CRUD操作API',
                    'priority': TaskPriority.MEDIUM,
                    'assignee_id': test_user.id
                },
                {
                    'title': '编写单元测试',
                    'description': '为所有API端点编写单元测试',
                    'priority': TaskPriority.MEDIUM,
                    'assignee_id': test_user.id
                }
            ]
            
            for task_data in sample_tasks:
                task = Task(
                    title=task_data['title'],
                    description=task_data['description'],
                    priority=task_data['priority'],
                    creator_id=admin.id,
                    assignee_id=task_data['assignee_id'],
                    project_id=project.id,
                    status=TaskStatus.TODO
                )
                db.session.add(task)
            
            db.session.commit()
            print("[SUCCESS] 示例任务创建成功")
            
    except Exception as e:
        print(f"[WARNING] 创建示例数据时出错: {e}")

if __name__ == '__main__':
    init_database()
